package com.chennan.algorithm.leetcode.eleven;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * @author chennan
 * @create 2021-10
 *
 *给你一个字符串数组 words ，只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。
 *
 * 美式键盘 中：
 *
 * 第一行由字符 "qwertyuiop" 组成。
 * 第二行由字符 "asdfghjkl" 组成。
 * 第三行由字符 "zxcvbnm" 组成。
 *
 *示例 1：
 *
 * 输入：words = ["Hello","Alaska","Dad","Peace"]
 * 输出：["Alaska","Dad"]
 *
 *我们为每一个英文字母标记其对应键盘上的行号，然后检测字符串中所有字符对应的行号是否相同。
 *
 * 我们可以预处理计算出每个字符对应的行号。
 *
 * 遍历字符串时，统一将大写字母转化为小写字母方便计算。
 * String rowIdx = "12210111011122000010020202";
 *
 */
public class FindWords {
    static String rows1 = "qwertyuiop";
    static String rows2 = "asdfghjkl";
    static String rows3 = "zxcvbnm";
    public static void main(String[] args) {
        String[] words = {"Hello","Alaska","Dad","Peace"};
        System.out.println(Arrays.toString(findWords(words)));
    }

    public static String[] findWords(String[] words){

        List<String> list = new ArrayList<>(words.length);
        for (String word : words) {
            char c = word.charAt(0);
            int flag = getFlag(String.valueOf(c));
            boolean count = true;
            for (int i = 1; i <word.length() ; i++) {
                if(flag!=getFlag(String.valueOf(word.charAt(i)))){
                    count=false;
                    break;
                }
            }
            if(!count){
                list.add(word);
            }
        }
        String[] strings = new String[list.size()];
        list.toArray(strings);
        return strings;
    }

    public static int getFlag(String c){
        return rows1.indexOf(c.toLowerCase())>=0?1:rows2.indexOf(c.toLowerCase())>=0?2:3;
    }
}
